BITS 32
extern tsss
extern obtener_sig_gdt_libre
extern inicializar_dir_usuario
extern gdt
global inicializaridle
extern pagina_libre_usuario
inicializaridle:

	enter 0,0
	push esi
	push edi
	push ebx

	mov edi,tsss
	add edi,104*1
	
	call inicializar_dir_usuario
	
	
	mov eax,cr3
	mov [edi+28],eax
	
	
	mov dword [edi+32],0x00012000
	
	
	mov dword [edi+36],0x00000202	;interrrupciones habilitadas
	call pagina_libre_usuario
	add eax,0xfff-4; Posiciono en la última posición direccionable porque la pila crece de arriba hacia abajo
	mov dword [edi+56],eax;esp Pido pagina para datos
	
	;;;;
	mov dword [edi+60],eax;ebp = esp al comienzo de la pila
	;;;
	
	mov word [edi+72],0;es
	mov word [edi+76],0x10;cs Segmento de código - Protegemos con paginacion
	mov word [edi+80],0x18;ss Segmento de datos - Protegemos con paginacion
	mov word [edi+84],0x18;ds Segmento de datos - Protegemos con paginacion
	mov word [edi+88],0;fs
	mov word [edi+92],0;gs
	mov word [edi+102],0xFFFF
	
	
	
	call obtener_sig_gdt_libre	
	
	mov esi, gdt
	add esi, eax
	mov word [esi], 0x67
	mov word [esi+2], di
	mov edx, edi
	shr edx, 16
	mov byte [esi+4], dl
	mov byte [esi+5], 10001001b
	mov byte [esi+6], 00010000b
	mov byte [esi+7], dh

fin:		
	pop ebx
	pop edi
	pop esi
	leave
	ret
